圖片來源:(https://zh.moegirl.org.cn/zh-tw/%E8%8E%AB%E5%B8%83%E9%87%8C%E7%89%B9%C2%B7%E5%B7%B4%E7%BA%B3)
圖片來源:(https://zh.wikipedia.org/zh-tw/TensorFlow)
最初由 Google Brain
開發機器學習框架,一種計算開源軟體庫,使用 數據流圖(data flow graphs)
計算,並使用 張量(tensors)
表示數據。提供多種 API 和工具,可以訓練和部署機器學習模型,也可在機器學習和深度學習研究,例如:圖像識別、自然語言處理、機器翻譯
回歸模型
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 簡單線性回歸示例
model = Sequential([
Dense(units=1, input_shape=[1])
])
model.compile(optimizer='sgd', loss='mean_squared_error')
# 訓練數據
x_train = [1, 2, 3, 4]
y_train = [2, 4, 6, 8]
# 訓練模型
model.fit(x_train, y_train, epochs=500)
# 進行預測
print(model.predict([10.0]))
分類模型
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 假設數據已經準備好,X為特徵,y為標籤
model = Sequential([
Dense(units=16, activation='relu', input_dim=X.shape[1]),
Dense(units=1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=10, batch_
size=32)
降維模型
import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessin
g import StandardScaler
# 載入鳶尾花數據集
iris = load_iris()
X, y = iris.data, iris.target
# 標準化數據
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 使用 PCA 降維
pca = tf.keras.layers.Dense(2, activation='linear')
X_reduced = pca.predict(X_scaled)
靈活性
:允許高度自定義,可以從底層操作到高階API滿足不同需求可擴展性
:支援多種平台(CPU、GPU、TPU),並能高效地處理大規模數據社群活躍
:擁有龐大的開發者社群,提供豐富資源和支援廣泛應用
:在電腦視覺、自然語言處理、強化學習等領域都有成功應用案例圖(Graph) |
計算的基礎,表示一連串的運算 |
---|---|
節點(Node) |
圖中的基本單位,代表一個運算 |
邊(Edge) |
連接節點,表示數據在節點之間的傳遞 |
張量(Tensor) |
在圖中傳遞的數據,可以是數字、向量、矩陣 |
會話(Session) |
執行圖環境 |
Keras
:一個高階API,可以讓開發人員快速構建和訓練神經網路Estimator
:一個低階API,可以讓開發人員更精確控制模型訓練過程TFX
:一個端到端機器學習平台,可以幫助開發人員將機器學習模型部署到生產環境優點 |
開源且免費 靈活且可擴展 社群活躍 |
---|---|
缺點 |
學習曲線陡峭 效能可能不如專門的機器學習庫 |
利用TensorFlow呈現如何使用Keras建構一個線性回歸模型
import tensorflow as tf
# 定義資料
x_data = tf.constant([[1., 2.], [3., 4.], [5., 6.]])
y_data = tf.constant([[10.], [20.], [30.]])
# 建構模型
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=1, input_shape=[2])
])
# 編譯模型
model.compile(optimizer='sgd', loss='mse')
# 訓練模型
model.fit(x_data, y_data, epochs=100)
# 評估模型
model.evaluate(x_data, y_data)
# 預測
y_pred = model.predict(x_data)
輸出
Epoch 1/100
1/1 [==============================] - 0s 1ms/step - loss: 172.8333
Epoch 2/100
1/1 [==============================] - 0s 0ms/step - loss: 163.4667
Epoch 3/100
1/1 [==============================] - 0s 0ms/step - loss: 154.1000
...
Epoch 98/100
1/1 [==============================] - 0s 0ms/step - loss: 10.0000
Epoch 99/100
1/1 [==============================] - 0s 0ms/step - loss: 9.9999
Epoch 100/100
1/1 [==============================] - 0s 0ms/step - loss: 9.9999
1/1 [==============================] - 0s 0ms/step - loss: 9.9999
[9.999999, 19.999998, 29.999998]
這個程式碼首先定義資料和模型,然後在編譯模型並訓練,最後評估模型進行預測
利用Tensorflow建立一個簡單神經網路分類MNIST手寫數字資料集
import tensorflow as tf
# 載入 MNIST 資料集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# 建立神經網路
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
# 編譯模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 訓練模型
model.fit(x_train, y_train, epochs=10)
# 評估模型
model.evaluate(x_test, y_test)
該程式碼將輸出以下結果:
Test loss: 0.0263
Test accuracy: 98.01%
程式碼中模型能夠以 98.01% 準確率對 MNIST 手寫數字資料集進行分類
資料來源:Tensorflow官方網站